/*
 *
 * 名称：五运六气
 * 功能：根据当前时间，计算五运六气各元素值
 * 作者：清河张
 * 时间：2025.05.11
 *
 */

#ifndef WUYUNLIUQI_H
#define WUYUNLIUQI_H
#include "base/lifa.h"
#include "base/utils.h"
#include "base/wuxing.h"
#include "base/bazi.h"
#include "liuqi.h"



class WUYUNLIUQI
{
public:

    WUYUNLIUQI(const LIFA& lf);

    //第几运，浮点，方便算角度
    qreal yun5r() const;

    //第几气，浮点，方便算角度
    qreal qi6r() const;

    //岁天干求岁运
    static void suiyun(const GAN10& g, WUXING5* wx,
                              YY* yy,
                              YY* ts);

    //求指定岁运名
    static const char* suiyun(int id);

    //求当前时间岁运名
    const char* suiyun() const;

    //求当前时间岁运属性
    void suiyun(WUXING5* wx,
                YY* yy = nullptr,
                YY* ts = nullptr) const;

    //求某主运名，zy < 0为当前时间主运名
    const char* zhuyun(int zy = -1) const;

    //求当前时间主运属性
    void zhuyun(WUXING5* wx,
                YY* yy = nullptr) const;

    //求某客运名，ky < 0为当前时间客运名
    const char* keyun(int ky = -1) const;

    //求当前时间克运属性
    void keyun(WUXING5* wx,
                YY* yy = nullptr) const;


    const QDateTime& yqjiaosi() const;//每年运气交司

    qreal jszhoulv() const;//交司周率，节气的一周比例

    //岁地支求岁气
    static void suiqi(const ZHI12& z, int* sq);

    //求指定岁气名
    static const char* suiqi(int id);

    //求当前岁气名
    const char* suiqi() const;

    //求当前岁气属性
    void suiqi(YY6QI6& yy6qi) const;

    //求某主气名，qi < 0为当前时间主气名
    const char* zhuqi(int qi = -1) const;

    //求当前主气属性
    void zhuqi(YY6QI6& yy6qi) const;

    //求某客气名，ky < 0为当前时间客气名
    const char* keqi(int qi = -1) const;

    //求当前客气属性
    void keqi(YY6QI6& yy6qi) const;

    //求主客气加临
    const char* jialin() const;
    //求司天名
    const char* sitian() const;
    //求在泉名
    const char* zaiquan() const;

    //司天或是在泉属性，返回0为司天，1为在泉
    int sizai(YY6QI6& yy6qi) const;

private:

    void __yqjs();//计算运气交司

    void __yun5();//一年五运，0-4

    void __qi6();//一年六气，0-5

    static char _show[64];

    const LIFA& _lf;

    int _yun, _qi, _suiqi;//岁气
    qreal _yun5r, _qi6r, _jszl;

    WUXING5 _swx;//岁运五行
    YY _syy;//岁阴阳
    YY _sts;//岁太少
    QDateTime _yqjiaosi;//当年运气交司时间
};

#endif // WUYUNLIUQI_H
